grammar jcodepres;
options {backtrack=true;}

body	: text* EOF
	;
	
text 	: blocked
	| marked
	;
	
blocked 	: indented
	| codeblock;	

marked	: boldwords 
	| italicwords
	| superwords
	| codewords
	| TEXT_BRK+
	;

indented	: ' '+ '*' TEXT+;
codeblock	:CODE_OPN (~CODE_CLS)+ CODE_CLS;

boldwords	: BOLD TEXT+ BOLD;
italicwords 	: ITALIC TEXT+ ITALIC;
superwords	: SUPER TEXT+ SUPER;
codewords	: CODE_OPN TEXT+ CODE_CLS;

TEXT	: WS? ('a'..'z')? WS?;	
TEXT_BRK	: WS_BRK? ('a'..'z')? WS_BRK?;	
WS 	: ' ' | '\t' ;
WS_BRK	: WS | BRK;
BRK	: '\n' | '\r';

CODE_OPN	:'{{{';
CODE_CLS	:'}}}';
BOLD	: '*';
ITALIC 	: '_';
SUPER	: '^';

